#include <QCoreApplication>
#include <QMap>
#include <QString>
#include <QDebug>
#include <QListIterator>


void __键值对操作()
{
    QMap<QString,int> map;

    map.insert("北京",10);
    map.insert("上海",20);
    map.insert("天津",30);

    QMapIterator<QString,int> it3(map);
    while (it3.hasNext()) {
        QMapIterator<QString,int>::Item item = it3.next();
        QString str = item.key();
        int val = item.value();

        QString str2;
        str2.setNum(val);

        qDebug() << str + str2 << Qt::endl;
    }
    qDebug() << "-------------------------" << Qt::endl;

    // 获取天津
    int v = map.value("天津");
    qDebug() << v << Qt::endl;

    // 修改天津的值
    map.value("天津",45);
    v = map.value("天津");
    qDebug() << v << Qt::endl;

    map["天津"] = 45;
    v = map.value("天津");
    qDebug() << v << Qt::endl;

    map.insert("天津",50);
    v = map.value("天津");
    qDebug() << v << Qt::endl;

    qDebug() << "-------------------------" << Qt::endl;
}

void testMap()
{
    QMap<QString,int> map;

    map.insert("北京",10);
    map.insert("上海",20);
    map.insert("天津",30);

    // 迭代
    QMap<QString,int>::iterator it = map.begin();
    while(it != map.end())
    {
        QString str = it.key();
        int val = it.value();

        QString str2;
        str2.setNum(val);

        qDebug() << str + str2 << Qt::endl;

        it++;
    }

    // STL 迭代风格
    QMap<QString,int>::const_iterator it2 = map.constBegin();
    while (it2 != map.constEnd()) {

        QString str = it2.key();
        int val = it2.value();

        QString str2;
        str2.setNum(val);

        qDebug() << str + str2 << Qt::endl;

        it2++;
    }


    // qt 迭代风格
    QMapIterator<QString,int> it3(map);
    while (it3.hasNext()) {
        QMapIterator<QString,int>::Item item = it3.next();
        QString str = item.key();
        int val = item.value();

        QString str2;
        str2.setNum(val);

        qDebug() << str + str2 << Qt::endl;
    }

    qDebug() << "-------------------------" << Qt::endl;

    for(auto key : map.keys())
    {
        QString k = key;
        int v = map.value(key);

        qDebug() << key  << ":" << v << Qt::endl;
    }


}

void testList()
{
    QList<QString> list;

    list << "my" << "hello" << "world";

    QList<QString>::iterator it = list.begin();
    while (it != list.end()) {

        qDebug() << *it << Qt::endl;

        it++;
    }


    QListIterator<QString> it2(list);
    while (it2.hasNext()) {

        QString str = it2.next();
        qDebug() << str << Qt::endl;
    }

}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // testMap();
//    testList();

    __键值对操作();
    return a.exec();
}
